package br.com.arg.aplica.model;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.xml.bind.annotation.XmlRootElement;

import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;

import br.com.arg.aplica.util.Obrigatorio;
import br.com.arg.aplica.util.Utils;

@Entity 
@XmlRootElement
public class Sistema implements Serializable {
	/** Default value included to remove warning. Remove or modify at will. **/
	private static final long serialVersionUID = 1L;

	public Sistema()
	{
		this.nome = "Novo sistema x";
		this.descricao = "Descriçao para o sistema x";
		this.dataCriacao = Utils.setData("hoje");
		this.matricula = "M220254";
		this.versao = "021";
		this.setCasosDeUso(new ArrayList<CasoDeUso>());
		this.setPendencias(new ArrayList<Pendencia>());
	}
	
	@Id
	@GeneratedValue
	private Long id;

	@NotNull
	@Obrigatorio(min = "1", max = "64")	
	private String nome;
	
	@NotNull
	@Obrigatorio(min = "1", max = "255")	
	private String descricao;

	@NotNull
	@Obrigatorio(min = "hoje")	
	private Date dataCriacao;

	@NotNull
	@Pattern(regexp = "[0-9.-]*", message = "Somente numero . e -")
	@Obrigatorio(min = "1", max = "10")	
	private String versao;

	@NotNull
	@Pattern(regexp = "M[0-9]*", message = "Letra M seguido de até 9 numeros")
	@Obrigatorio(min = "1", max = "10")	
	private String matricula;
	
	//**********************************
	@OneToMany(cascade = CascadeType.ALL)
	@LazyCollection(LazyCollectionOption.FALSE)
    private List<CasoDeUso> casosDeUso;
	
	@OneToMany(cascade = CascadeType.ALL)
	@LazyCollection(LazyCollectionOption.FALSE)
    private List<Pendencia> pendencias;
	
	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public Date getDataCriacao() {
		return dataCriacao;
	}

	public void setDataCriacao(Date dataCriacao) {
		this.dataCriacao = dataCriacao;
	}

	public String getVersao() {
		return versao;
	}

	public void setVersao(String versao) {
		this.versao = versao;
	}

	public String getMatricula() {
		return matricula;
	}

	public void setMatricula(String matricula) {
		this.matricula = matricula;
	}

	public List<CasoDeUso> getCasosDeUso() {
		return casosDeUso;
	}

	public void setCasosDeUso(List<CasoDeUso> casosDeUso) {
		this.casosDeUso = casosDeUso;
	}
	
	public List<Pendencia> getPendencias() {
		return pendencias;
	}

	public void setPendencias(List<Pendencia> pendencias) {
		this.pendencias = pendencias;
	}	
}
